#ifndef PARSER_H
#define PARSER_H

#include <QByteArray>
#include <QStringList>
#include <string>
#include <map>
#include <QString>
#include <algorithm>
#include <functional>

/* Клас Grammar описує синтаксис, подібний до xml */

class Grammar
{
    std::map<char, std::map<int, std::string> > grammar;
    QStringList sections_list_name; // назви секцій
    void __setSectionsName();
public:
    Grammar();
    std::map<char, std::map<int, std::string> > &getGrammar();
    void setSectionsName(const QStringList&);
};

namespace Parser {

enum ParsingType { Searching, Writing }; // режим роботи парсера
bool parser(QByteArray &buf, uint &buf_index, char nt_sym, Grammar&, std::map<QString, std::map<QString, int> >&, Parser::ParsingType);
void getBufIndexWithoutSpace(QByteArray &buf, uint &buf_index);
}

#endif // PARSER_H
